Debugging an application can be particularly difficult when the application is not owned by a consumer/customer or when the source code associated with an application is no longer available by an owner of the application. In some cases, a customer may encounter problems for an application that was not upgraded or an application whose license was not renewed. Thus, the only believed way in which such an application can be fixed is to acquire a new version of the application via a renewed or upgraded license. Such an option may not be financially practical for some customers.
In short, some applications may have actually been in use for many years. Very often, these applications cannot be debugged at a symbolic level because the applications lack their source code, such that an engineer cannot compile and/or link the applications for purposes of inserting breakpoints and other debugging statements into executing version of the applications. It may also not be possible to load the application into an automated debugger, because the error may not present itself within the automated debugger, which is located outside a typical production environment for the application. Essentially, the error may only present itself within a production environment, such that the automated debugger is incapable of recreating a failure state which was produced only within the production environment.
In fact, often the application is viewed as a black box to a consumer or an engineer. Furthermore, a black box is typically debugged by analyzing memory dumps. Analyzing a memory dump is not a desired technique for debugging; is often time consuming; and can involve a lot of guess work on the part of an engineer.
Accordingly, improved techniques for debugging applications are needed in order to improve debugging associated with applications that are viewed as black boxes.